#! /usr/bin/env python
# -*- coding: utf-8 -*-

# *************************************************************
#     Filename @  customsignal.py
#       Author @  Huoty
#  Create date @  2015-01-07 16:32:43
#  Description @  
# *************************************************************

import gobject

class Sender(gobject.GObject):
    def __init__(self):
        self.__gobject_init__()
        
gobject.type_register(Sender)
gobject.signal_new("z_signal", Sender, gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ())
# 注册了一个新的对象和一个新的信号
# Signal_new()凼数为 Sender 对象注册了一个被称为 z_signal 的信号。
# 这个 SIGNAL_RUN_FIRST 参数意思是,接收信号对象的默认处理函数作为第一次被调用。
# 后面两个参数是返回值类型和参数类型。
# 在本例中，不返回任何值，并且不发送任何参数。

class Receiver(gobject.GObject):
    def __init__(self, sender):
        self.__gobject_init__()
        sender.connect('z_signal', self.report_signal)
        # receiver 将 sender 作为参数,因此 receiver 能够监听 sender 的信号。

    def report_signal(self, sender):
        print "Receiver reacts to z_signal"

def user_callback(object):
    print "user callback reacts to z_signal"

# Script starts from here

if __name__ == '__main__':
    sender = Sender()
    receiver = Receiver(sender)
    sender.connect("z_signal", user_callback) # 将信号连接到用户回调函数
    sender.emit("z_signal") # 发射信号
